/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.Equipamento;
import util.ControlaConexao;

/**
 *
 * @author Gilmara Maquine
 */
public class EquipamentoDAO {
    
    private Connection conexao;
    private PreparedStatement instrucao;
    private ResultSet resultado;

    private void fechaInstrucao() {
        try {
            this.instrucao.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar instrucao!" + e.getMessage());
        }
    }

    private void fechaConexao() {
        try {
            this.conexao.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar conexao!" + e.getMessage());
        }
    }

    private void fechaResultado() {
        try {
            this.resultado.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar o resultado!" + e.getMessage());
        }
    }
    
    public void inserir(Equipamento equipamento){
        try{
            this.conexao = ControlaConexao.getConexao();
            String sql = "INSERT INTO equipamento(equ_descricao,equ_tombamento,equ_num_serie,equ_configuracao) VALUES(?,?,?,?)";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setString(1,equipamento.getDescricao());
            this.instrucao.setString(2,equipamento.getTombamento());
            this.instrucao.setString(3,equipamento.getNumSerie());
            this.instrucao.setString(4,equipamento.getConfiguracao());
        
            instrucao.execute();
            System.out.println("Conectado com sucesso!");
        }catch(SQLException e){
            throw new RuntimeException(e);
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
    }
    
    public void alterar(Equipamento equipamento){
        try{
            this.conexao = ControlaConexao.getConexao();
            String sql = "UPDATE equipamento SET equ_descricao = ? , equ_tombamento = ?, equ_num_serie = ?, equ_configuracao = ? WHERE equ_id = ?";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setString(1,equipamento.getDescricao());
            this.instrucao.setString(2,equipamento.getTombamento());
            this.instrucao.setString(3,equipamento.getNumSerie());
            this.instrucao.setString(4,equipamento.getConfiguracao());
            instrucao.execute();
            System.out.println("Conectado com sucesso");
        }catch(SQLException e){
            System.out.println("Erro: "+e.getMessage());
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
        
     }
    
    public void excluir (Equipamento equipamento){
        try{
            this.conexao = new ControlaConexao().getConexao();
            String sql = "DELETE FROM equipamento WHERE equ_id = ?";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setLong(1,equipamento.getId());
            instrucao.execute();
            System.out.println("Conectado com sucesso!");
        }catch(SQLException e){
            System.out.println("Erro: "+e.getMessage());
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
    }
  
    public Equipamento consultar(Equipamento equipamento){
        Equipamento equipamentoEncontrado = null;
        try{
            this.conexao = new ControlaConexao().getConexao();
            System.out.println("CONECTADO!");
            String sql = "SELECT * FROM equipamento WHERE equ_id = ?";
            this.instrucao = conexao.prepareStatement(sql);
            instrucao.setLong(1,equipamento.getId());
            resultado = instrucao.executeQuery();
            while (resultado.next()) {
                    equipamentoEncontrado = new Equipamento();
                    equipamentoEncontrado.setId(Long.parseLong(resultado.getString("equ_id")));
                    equipamentoEncontrado.setDescricao(resultado.getString("equ_descricao"));
                    equipamentoEncontrado.setTombamento(resultado.getString("equ_tombamento"));
                    equipamentoEncontrado.setNumSerie(resultado.getString("equ_num_serie"));
                    equipamentoEncontrado.setConfiguracao(resultado.getString("equ_configuracao"));
            }
            
        }catch(SQLException e){
                System.out.println("Erro: "+e.getMessage());
            }finally{
                fechaResultado();
                fechaInstrucao();
                fechaConexao();
            }
        return equipamentoEncontrado;
    }
    
    public List<Equipamento> pesquisar(Equipamento equipamento){
       Equipamento equipamentoEncontrado = null;
       List<Equipamento> listaequipamentos = new ArrayList<Equipamento>();
       try{
           this.conexao = new ControlaConexao().getConexao();
            System.out.println("Conectado!");
            String sql = "SELECT * FROM equipamento WHERE equ_descricao like ?";
            this.instrucao = conexao.prepareStatement(sql);
            instrucao.setString(1, "%" + equipamento.getDescricao() + "%");
            resultado = instrucao.executeQuery();
             while (resultado.next()) {
                equipamentoEncontrado = new Equipamento();
                equipamentoEncontrado.setId(Long.parseLong(resultado.getString("equ_id")));
                equipamentoEncontrado.setDescricao(resultado.getString("equ_descricao"));
                equipamentoEncontrado.setTombamento(resultado.getString("equ_tombamento"));
                equipamentoEncontrado.setNumSerie(resultado.getString("equ_num_serie"));
                equipamentoEncontrado.setConfiguracao(resultado.getString("equ_configuracao"));
                
                listaequipamentos.add(equipamentoEncontrado);

            }
       }catch(SQLException e){
                System.out.println("Erro: "+e.getMessage());
            }finally{
                fechaResultado();
                fechaInstrucao();
                fechaConexao();
        }
        return listaequipamentos;
    }
    
    
}
